/*
 * @Author: your name
 * @Date: 2021-09-12 11:49:15
 * @LastEditTime: 2022-01-16 15:42:36
 * @LastEditors: Please set LastEditors
 * @Description: 超时管理类，界面需要超时处理时使用。
 * @FilePath: \phone\src\time_out.h
 */
#ifndef TIME_OUT_H
#define TIME_OUT_H
constexpr unsigned int SLEEP_TIME = 100;
class TimeOut
{
public:
    TimeOut(unsigned int timeOut);
    virtual ~TimeOut();
    /**
     * @brief 
     * 倒计时
     */
    void CountDown();
    void ResetTimeOut();
    void StartCountDown();
    /**
     * @brief 
     * 停止倒计时。
     */
    void StopCountDown();
    /**
     * @brief 
     * 超时处理事件，抽象方法，由派生类重载。
     */
    virtual void TimeOutEvent() {}
    void ResetRunningTime();
    /**
     * @brief Set the Time Out object
     * 设置超时时间，大于0生效，等于0取消。
     * @param timeOut 
     */
    void SetTimeOut(unsigned int timeOut);
    void SetLoop(bool value);

private:
    /**
     * @brief 
     * 持续的时间
     */
    unsigned int runningTime;
    /**
     * @brief 
     * 超时时间
     */
    unsigned int timeOut;
    /**
     * @brief 
     * 运行标识
     */
    bool run;
    /**
     * @brief 
     * 循环，置为true时当计时器用，默认为false
     */
    bool loop;
};
#endif